package per.zx;

/**
 * @author zhengxin
 * @date 2021/7/4 19:36
 * @description LongAdder 源码解析
 *
 * 解析途径：
 * 1、LongAdder的结构是怎样的？
 *      LongAdder extends Striped64 implements Serializable
 *
 *          Cell[] cell;    // Cell 类使用@sun.misc.Contended修饰，避免伪共享，并发累加操作数组对象
 *          transient volatile long base; // 并发度不高时，使用该属性进行累加
 *          transient volatile int cellsBusy; // 标识，0：没有在被初始化或者扩容，也没有在新建Cell元素，1：反之
 * 2、当前线程应该访问 Cell 数组里面的哪一个Cell 元素？
 * 3、如何初始化Cell数组？
 * 4、Cell数组如何扩容？
 * 5、线程访问分配的 Cell 元素有冲突后如何处理？
 * 6、如何保证线程操作被分配的 Cell 元素的原子性？CAS+volatile
 */
public class TestLongAdder {
}
